package 位运算;

public class No260只出现一次的数字III {

    /**
     * 与[JZ56数组中出现次数II]相同
     */

    public int[] singleNumber(int[] nums) {

        int xorSum=0;

        for(int num:nums){
            xorSum^=num;
        }

        int count=1;
        //找到第一个1,即不同位
        while(true){
            //因为 10 & 110 = 2 所以不是一直为1
            if((count&xorSum)>0){
                break;
            }
            count=count<<1;
        }

        //然后开始分组
        int result1=0;
        int result2=0;

        for(int num:nums){
            if((num&count)>0){
                result1^=num;
            }else{
                result2^=num;
            }
        }

        return new int[]{result1,result2};
    }

    public static void main(String[] args) {
        No260只出现一次的数字III n=new No260只出现一次的数字III();
        int[] arr={1,2,1,3,2,5};
        n.singleNumber(arr);
    }

}
